package com.kurtphpr.sistema.venda;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.classic.Session;

import com.kurtphpr.sistema.cliente.Cliente;
import com.kurtphpr.sistema.produto.Produto;

public class VendaDAOHibernate implements VendaDAO{

	private Session sessao;
	
	public Session getSessao(){
		return sessao;
	}
	
	public void setSessao(Session sessao) {
		this.sessao = sessao;
	}

	@Override
	public void registraVenda(Venda venda) {
		this.sessao.save(venda);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Venda> getLista() {
		Criteria lista = sessao.createCriteria(Venda.class);
		return lista.list();
	}

	@Override
	public boolean existeEstoqueProduto(Produto produto) {
		
//		Produto produtoPesquisado = (Produto) this.sessao.get(Produto.class, produto.getId());
//		if(produtoPesquisado != null){
//			if(produtoPesquisado.getEstoque()>0){
//				return true;
//			}
//		}
//		return false;
		return true;
	}
	
	@Override
	public void excluir(Venda venda) {
		this.sessao.delete(venda);		
	}

	@Override
	public void reduzEstoqueProduto(Produto produto) {
//		String hql = "update Produto p set p.estoque =:novoEstoque where p.id =:idProduto";
//		Query query = sessao.createQuery(hql);
//		query.setInteger("novoEstoque", produto.getEstoque()-1);
//		query.setLong("idProduto", produto.getId());
//		query.executeUpdate();
	}

	@Override
	public void setStatusProduto(Produto produto) {

		String hql = "update Produto p set p.status =:novoStatus where p.id =:idProduto";
		Query query = sessao.createQuery(hql);
		query.setCharacter("novoStatus", produto.getStatus());
		query.setLong("idProduto", produto.getId());
		query.executeUpdate();
	}

	@Override
	public void setNovoSaldoCliente(Cliente cliente) {
		String hql = "update Cliente c set c.saldo =:novoSaldo where c.id =:idCliente";
		Query query = sessao.createQuery(hql);
		query.setFloat("novoSaldo", cliente.getSaldo());
		query.setLong("idCliente", cliente.getId());
		query.executeUpdate();
	}
}
